package com.czk.type;

import org.objectweb.asm.Type;

/**
 * type中的一些特殊方法
 *
 * @Author:ChenZhangKun
 * @Date: 2021/8/12 14:32
 */
public class SpecialType {
    public static void main(String[] args) {
        // 获取type
        Type type = Type.getType("[[[[[Ljava/lang/String;");
        // 拿到数组纬度
        int dimensions = type.getDimensions();
        // 拿到数组类型
        Type elementType = type.getElementType();
        // 5
        System.out.println(dimensions);
        // Ljava/lang/String;
        System.out.println(elementType);


        // ===============
        /*和方法相关的特殊方法*/

        Type methodType = Type.getMethodType("(Ljava/lang/String;I)V");
        // 拿到描述符 (Ljava/lang/String;I)V
        String descriptor = methodType.getDescriptor();
        // 拿到方法的参数类型
        Type[] argumentTypes = methodType.getArgumentTypes();
        System.out.println(descriptor);
        for (Type argumentType : argumentTypes) {
            // string
            // int
            System.out.println(" " + argumentType);
        }
        // =======================


        // 获取类型早operate frame 和 local vriable 中所占的位置
        Type intType=Type.INT_TYPE;
        // int 占一个slot
        System.out.println(intType.getSize());
        Type longType = Type.LONG_TYPE;
        // long 占两个slot
        System.out.println(longType.getSize());


    }
}
